// 进行axios的全局配置
import axios from 'axios'

// 导入elementUI提示组件用于提示登录反馈信息
import { Message } from 'element-ui'

import store from '../store/index'

import ErrorCodeMessage from './errorCode'

import router from '../router'

// 项目的根地址
const BASE_URL = '/api'

//默认配置参数
const defaultOptions = {
  baseURL:BASE_URL
}

// 创建一个axios实例
const instance = axios.create(defaultOptions)

// 在包头中加入令牌

// let token = store['_modules'].root.state.admin.adminInfo['access_token']
// console.log(token)

// instance.defaults.headers['authorization'] = token

// 配置一个请求拦截器 - 处理请求发起之前的业务(加载动画)
instance.interceptors.request.use(config =>{
  let token = store.state.user.adminInfo.access_token // 在store/user里面获取到token
  // console.log(store.state.user.adminInfo.access_token)
  if(token){// 如果有token就携带token
    config.headers['Authorization'] = token
  }
  return config;
},error=>{
  console.log(error);
})  

// 配置一个相应的拦截器 - 处理请求完成的后的业务(请求成功和失败的提示等)
  // console.log(router)
instance.interceptors.response.use(config =>{
  // console.log(config);
  
  return config;
},error =>{
  console.log(error.response.data)

  // 针对token过期和异常，在刷新页面之后也需要跳转到登录页且清除storgae
  let specialCode = [100065, 100043, 100044];//特殊错误码

  let errorTips = '网络请求错误或请求登录失败!'
  // console.log(errorCode)
  switch (error.response.status) {
    case 401:
      var errorCode = error.response.data.errorCode
      errorTips = ErrorCodeMessage[errorCode]
      console.log(errorCode)
      if(specialCode.includes(errorCode)){
          // 调用store清除数据方法
        let redirectUrl = router.currentRoute.fullPath || '/'
          store.dispatch('admin/removeUserInfo').then(()=>{
            router.push({
            path: '/login',
            redirect: redirectUrl
          })
        })
      }
    break;

    case 400:
      var errorCode = error.response.data.errorCode
      errorTips = ErrorCodeMessage[errorCode]
    break;
    
    case 403:
    break;
      
  }

  // if(error.response.status == 401){
    
  // }else if(error.response.status == 400){
  //   errorTips = ErrorCodeMessage[errorCode]
  // } 
  Message({
    type: 'error',
    message: errorTips
  })
})

// 导出
export default instance
